// 递归实现，使用 concat 函数
function flatten(arr) {
  let res = [];
  for (let item of arr) {
    if (Array.isArray(item)) {
      res = res.concat(flatten(item));
    } else {
      res.push(item);
    }
  }
  return res;
}

// 使用reduce + 递归实现
/**
 *
 * @param {[]} arr
 */
function fn(arr) {
  return arr.reduce((prev, cur) => {
    return prev.concat(Array.isArray(cur) ? fn(cur) : cur);
  }, []);
}

// toString
function flat(arr) {
  return arr
    .toString()
    .split(",")
    .map((val) => parseInt(val));
}

// 扩展运算符,使用扩展运算符代替concat 方法
function flat1(arr) {
  let res = [];
  for (let item of arr) {
    if (Array.isArray(item)) {
      res.push(...flat1(item));
    } else {
      res.push(item);
    }
  }
  return res;
}

console.log(flat1([1, 2, [3, 4, 5, [6, 7, 8], 9], 10, [11, 12]]));
